using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using DIS_BUS_WS.DIS_DAL_WS;

namespace DIS_BUS_WS
{
	[ServiceContract]
	public interface IDIS_BUS_Service
	{
		/////////////////// CATEGORY ///////////////////
		[OperationContract]
		CategoryDTO[] Category_SelectAll();
		[OperationContract]
		CategoryDTO Category_SelectByID(int id);
		[OperationContract]
		bool Category_Insert(CategoryDTO obj);
		[OperationContract]
		bool Category_Delete(int id);
		[OperationContract]
		bool Category_Update(CategoryDTO obj);
		[OperationContract]
		CategoryDTO[] Category_RetrieveByID(int id);
		/////////////////// DAILYREPORT ///////////////////
		[OperationContract]
		DailyReportDTO[] DailyReport_SelectAll();
		[OperationContract]
		DailyReportDTO DailyReport_SelectByID(int id);
		[OperationContract]
		bool DailyReport_Insert(DailyReportDTO obj);
		[OperationContract]
		bool DailyReport_Delete(int id);
		[OperationContract]
		bool DailyReport_Update(DailyReportDTO obj);
		[OperationContract]
		DailyReportDTO[] DailyReport_RetrieveByID(int id);
		[OperationContract]
		DailyReportDTO[] DailyReport_SelectByIDRestaurant(int idrestaurant);
        [OperationContract]
        DailyReportDTO DailyReport_SelectByIDRestaurantAndReportDate(int idrestaurant, DateTime reportdate);
		/////////////////// WEEKLYREPORT ///////////////////
		[OperationContract]
		WeeklyReportDTO[] WeeklyReport_SelectAll();
		[OperationContract]
		WeeklyReportDTO WeeklyReport_SelectByID(int id);
		[OperationContract]
		bool WeeklyReport_Insert(WeeklyReportDTO obj);
		[OperationContract]
		bool WeeklyReport_Delete(int id);
		[OperationContract]
		bool WeeklyReport_Update(WeeklyReportDTO obj);
		[OperationContract]
		WeeklyReportDTO[] WeeklyReport_RetrieveByID(int id);
		[OperationContract]
		WeeklyReportDTO[] WeeklyReport_SelectByIDRestaurant(int idrestaurant);
        [OperationContract]
        WeeklyReportDTO WeeklyReport_SelectByIDRestaurantAndReportDate(int idrestaurant, DateTime startdate, DateTime enddate);
		/////////////////// ITEM ///////////////////
		[OperationContract]
		ItemDTO[] Item_SelectAll();
		[OperationContract]
		ItemDTO Item_SelectByID(int id);
		[OperationContract]
		bool Item_Insert(ItemDTO obj);
		[OperationContract]
		bool Item_Delete(int id);
		[OperationContract]
		bool Item_Update(ItemDTO obj);
		[OperationContract]
		ItemDTO[] Item_RetrieveByID(int id);
		[OperationContract]
		ItemDTO[] Item_SelectByIDCategory(int idcategory);
		/////////////////// EMPLOYEE ///////////////////
		[OperationContract]
		EmployeeDTO[] Employee_SelectAll();
		[OperationContract]
		EmployeeDTO Employee_SelectByID(int id);
		[OperationContract]
		bool Employee_Insert(EmployeeDTO obj);
		[OperationContract]
		bool Employee_Delete(int id);
		[OperationContract]
		bool Employee_Update(EmployeeDTO obj);
		[OperationContract]
		EmployeeDTO[] Employee_RetrieveByID(int id);
		[OperationContract]
		EmployeeDTO[] Employee_SelectByIDRole(int idrole);
		[OperationContract]
		EmployeeDTO[] Employee_SelectByIDRestaurant(int idrestaurant);
        [OperationContract]
        EmployeeDTO Employee_SelectByUserName(string username);
        [OperationContract]
        EmployeeDTO Employee_SelectByUserNameAndPassword(string username, string password);
		/////////////////// NATIONALPROMOTION ///////////////////
		[OperationContract]
		NationalPromotionDTO[] NationalPromotion_SelectAll();
		[OperationContract]
		NationalPromotionDTO NationalPromotion_SelectByID(int id);
		[OperationContract]
		bool NationalPromotion_Insert(NationalPromotionDTO obj);
		[OperationContract]
		bool NationalPromotion_Delete(int id);
		[OperationContract]
		bool NationalPromotion_Update(NationalPromotionDTO obj);
		[OperationContract]
		NationalPromotionDTO[] NationalPromotion_RetrieveByID(int id);
		[OperationContract]
		NationalPromotionDTO NationalPromotion_SelectByIDItem(int iditem);
		/////////////////// LOCALPROMOTION ///////////////////
		[OperationContract]
		LocalPromotionDTO[] LocalPromotion_SelectAll();
		[OperationContract]
		LocalPromotionDTO LocalPromotion_SelectByID(int id);
		[OperationContract]
		bool LocalPromotion_Insert(LocalPromotionDTO obj);
		[OperationContract]
		bool LocalPromotion_Delete(int id);
        [OperationContract]
        bool LocalPromotion_DeleteByIDItemAndIDRestaurant(int iditem, int idrestaurant);
		[OperationContract]
		bool LocalPromotion_Update(LocalPromotionDTO obj);
		[OperationContract]
		LocalPromotionDTO[] LocalPromotion_RetrieveByID(int id);
		[OperationContract]
		LocalPromotionDTO[] LocalPromotion_SelectByIDItem(int iditem);
		[OperationContract]
		LocalPromotionDTO[] LocalPromotion_SelectByIDRestaurant(int idrestaurant);
        [OperationContract]
        LocalPromotionDTO LocalPromotion_SelectByIDItemAndIDRestaurant(int iditem, int idrestaurant);
		/////////////////// ORDERS ///////////////////
		[OperationContract]
		OrdersDTO[] Orders_SelectAll();
		[OperationContract]
		OrdersDTO Orders_SelectByID(int id);
		[OperationContract]
		bool Orders_Insert(ref OrdersDTO obj);
		[OperationContract]
		bool Orders_Delete(int id);
		[OperationContract]
		bool Orders_Update(OrdersDTO obj);
		[OperationContract]
		OrdersDTO[] Orders_RetrieveByID(int id);
		[OperationContract]
		OrdersDTO[] Orders_SelectByIDRestaurant(int idrestaurant);
        [OperationContract]
        OrdersDTO[] Orders_SelectByIDRestaurantAndOrderDate(int idrestaurant, DateTime orderdate);
		/////////////////// ORDERDETAIL ///////////////////
		[OperationContract]
		OrderDetailDTO[] OrderDetail_SelectAll();
		[OperationContract]
		OrderDetailDTO OrderDetail_SelectByID(int id);
		[OperationContract]
		bool OrderDetail_Insert(OrderDetailDTO obj);
		[OperationContract]
		bool OrderDetail_Delete(int id);
        [OperationContract]
        bool OrderDetail_DeleteByOrder(int idorder);
		[OperationContract]
		bool OrderDetail_Update(OrderDetailDTO obj);
		[OperationContract]
		OrderDetailDTO[] OrderDetail_RetrieveByID(int id);
		[OperationContract]
		OrderDetailDTO[] OrderDetail_SelectByIDOrder(int idorder);
		[OperationContract]
		OrderDetailDTO[] OrderDetail_SelectByIDItem(int iditem);
		/////////////////// ROLEFUNCTIONS ///////////////////
		[OperationContract]
		RoleFunctionsDTO[] RoleFunctions_SelectAll();
		[OperationContract]
		RoleFunctionsDTO RoleFunctions_SelectByID(int id);
		[OperationContract]
		bool RoleFunctions_Insert(RoleFunctionsDTO obj);
		[OperationContract]
		bool RoleFunctions_Delete(int id);
		[OperationContract]
		bool RoleFunctions_Update(RoleFunctionsDTO obj);
		[OperationContract]
		RoleFunctionsDTO[] RoleFunctions_RetrieveByID(int id);
		[OperationContract]
		RoleFunctionsDTO[] RoleFunctions_SelectByIDRole(int idrole);
		[OperationContract]
		RoleFunctionsDTO[] RoleFunctions_SelectByIDFunction(int idfunction);
		/////////////////// FUNCTIONS ///////////////////
		[OperationContract]
		FunctionsDTO[] Functions_SelectAll();
		[OperationContract]
		FunctionsDTO Functions_SelectByID(int id);
		[OperationContract]
		bool Functions_Insert(FunctionsDTO obj);
		[OperationContract]
		bool Functions_Delete(int id);
		[OperationContract]
		bool Functions_Update(FunctionsDTO obj);
		[OperationContract]
		FunctionsDTO[] Functions_RetrieveByID(int id);
		/////////////////// ROLE ///////////////////
		[OperationContract]
		RoleDTO[] Role_SelectAll();
		[OperationContract]
		RoleDTO Role_SelectByID(int id);
		[OperationContract]
		bool Role_Insert(RoleDTO obj);
		[OperationContract]
		bool Role_Delete(int id);
		[OperationContract]
		bool Role_Update(RoleDTO obj);
		[OperationContract]
		RoleDTO[] Role_RetrieveByID(int id);
		/////////////////// RESTAURANT ///////////////////
		[OperationContract]
		RestaurantDTO[] Restaurant_SelectAll();
		[OperationContract]
		RestaurantDTO Restaurant_SelectByID(int id);
		[OperationContract]
		bool Restaurant_Insert(RestaurantDTO obj);
		[OperationContract]
		bool Restaurant_Delete(int id);
		[OperationContract]
		bool Restaurant_Update(RestaurantDTO obj);
		[OperationContract]
		RestaurantDTO[] Restaurant_RetrieveByID(int id);
	}
}
